//
//  WmcMediaBrowseDelegate.swift
//  YPWatermarkCamera
//
//  Created by 赵新 on 2022/4/15.
//

import UIKit

// MARK: - [WmcMediaBrowseDelegate]

/// 媒体预览代理
public protocol WmcMediaBrowseDelegate: NSObjectProtocol {
    // MARK: 底部工具栏

    /// 设置媒体浏览页下方工具栏菜单按钮
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - albumType: 当前浏览的相册类型，本地、系统、还是云相册
    ///   - mediaType: 当前浏览的媒体类型，图片、视频
    ///   - defaultList: 默认的按钮列表
    /// - Returns: 自定义设置后的按钮列表
    func toolMenuList(_ attribute: WmcAttribute,
                      albumType: WmcMediaBrowseVM.AlbumType,
                      mediaType: WmcMedia.MediaType,
                      defaultList: [WmcButtonItemType.MediaBrowseTool])
        -> [WmcButtonItemType.MediaBrowseTool]

    // MARK: 事务相关

    /// 每次滑动时候，回调浏览的媒体
    /// - Parameters:
    ///   - attribute: 当前水印相机的属性
    ///   - albumType: 当前浏览的相册类型，本地、系统、还是云相册
    ///   - collectionView: collectionView
    ///   - currentImage: 当前所查看的图片
    ///
    ///         每次用户进行滑动查看时，都会进行回调，并且第一次进入页面时也会进行回调
    ///         通过此方法可以实时的获取当前浏览的媒体
    ///         因为相册类型原因，导致浏览图片存在url、本地、数据库等地方中读取，所以采用WmcMedia来作为存储媒介
    ///         图片：
    ///         由于所浏览的图片均为 WmcImage ，若需要转换为UIImage则需要调用[loadUIImage]方法：
    ///         let wmcImage = WmcImage()
    ///         wmcImage.loadUIImage() { uiImage in
    ///             uiImage......
    ///         }
    ///         视频：
    ///         由于所浏览视频均为WmcVideo，若需要转换为Asset则须调用[loadAVAsset]方法:
    ///         let wmcVideo = WmcVideo()
    ///         wmcImage.loadAVAsset() { url in
    ///             url......
    ///         }
    ///
    func browseScrollDidScroll(_ attribute: WmcAttribute,
                               albumType: WmcMediaBrowseVM.AlbumType,
                               currentMedia: WmcMedia,
                               collectionView: UICollectionView)
    
    
    /// 用于获取水印信息的接口
    func browseScrollDidScroll(_ attribute: WmcAttribute,
                               albumType: WmcMediaBrowseVM.AlbumType,
                               currentMedia: WmcMedia,
                               watermarkModel: WmcWatermarkDetailModel?,
                               saveTime: Date,
                               collectionView: UICollectionView)
}

// MARK: - 驱动方法

public extension WmcMediaBrowseDelegate {
    /// 刷新浏览页下方的按钮列表
    ///
    ///     会再次执行 [toolMenuList]
    ///
    /// - Parameter mediaType: 媒体类型，图片、视频
    func wmc_reloadToolMenuList(mediaType: WmcMedia.MediaType) {
        YPWmcDrivingManager.shared.mediaBrowse_reloadToolMenuItemsBlock?(mediaType)
    }

    /// 设置媒体浏览页下方工具栏菜单按钮的气泡
    /// - Parameters:
    ///   - model: 气泡设置的模型
    ///   - index: 显示在哪个索引的Btn上
    func wmc_addToolMenuPopView(model: WmcBubbleVM, at index: Int) {
        YPWmcDrivingManager.shared.mediaBrowse_addTooMenuPopBlock?(model, index)
    }
    
    /// 获取当前媒体的水印信息
    /// 如果展示列表中没有水印数据的话会返回nil
    func wmc_currentMediaWatermark() -> WmcWatermarkDetailModel? {
        return YPWmcDrivingManager.shared.mediaBrowse_currentMediaWatermarkBlock?()
    }
}

// MARK: - =========================⚠️以下对接业务方无需查看或了解⚠️=========================

// MARK: 可选方法

public extension WmcMediaBrowseDelegate {
    /// 设置媒体浏览页下方工具栏菜单按钮
    func toolMenuList(_ attribute: WmcAttribute,
                      albumType: WmcMediaBrowseVM.AlbumType,
                      mediaType: WmcMedia.MediaType,
                      defaultList: [WmcButtonItemType.MediaBrowseTool]) -> [WmcButtonItemType.MediaBrowseTool]
    {
        return defaultList
    }

    /// 每次滑动时候，回调浏览的媒体
    func browseScrollDidScroll(_ attribute: WmcAttribute,
                               albumType: WmcMediaBrowseVM.AlbumType,
                               currentMedia: WmcMedia,
                               collectionView: UICollectionView) {}
    
    
    func browseScrollDidScroll(_ attribute: WmcAttribute,
                               albumType: WmcMediaBrowseVM.AlbumType,
                               currentMedia: WmcMedia,
                               watermarkModel: WmcWatermarkDetailModel?,
                               saveTime: Date,
                               collectionView: UICollectionView){}
}
